/**
 * 
 */
package co.gov.medellin.sdep.sisdep.gestion.service;

import java.util.Date;
import java.util.List;

import co.gov.medellin.sdep.sisdep.common.message.MessageDescriptorConstant;
import co.gov.medellin.sdep.sisdep.common.service.BaseService;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstSocioEconomicoException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstSocioEconomicoRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.descriptor.EstSocioEconomicoMessageDescriptor;
import co.gov.medellin.sdep.sisdep.model.EstSocioEconomico;
import co.gov.medellin.sdep.sisdep.model.comp.EstSocioEconomicoComp;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstAreaSocioeconoDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstAspecPoblacionalDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstCambioLDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstCondViviendaDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstExoneraAhorroDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstGrupoFamiliarDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstGrupoFamiliarDocDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstOcupacionEpuDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstSeguridadSocDAOT;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IEstSocioEconomicoDAOT;

/**
 * @author Usuario
 *
 */
public class EstSocioEconomicoServiceImpl extends BaseService implements IEstSocioEconomicoService {

	//----------------------------------------------------------------------
	//--- propiedades y constructores                                 init()
	//----------------------------------------------------------------------

	/**
	 * default serial version
	 */
	private static final long serialVersionUID = 1L;
	/** */
	private IEstSocioEconomicoDAOT estSocioEconomicoDAO;
	
	/** acceso a datos seguridad social*/
	private IEstSeguridadSocDAOT estSeguridadSocDAO;
	/** acceso a datos area socio economica */
	private IEstAreaSocioeconoDAOT estAreaSocioeconoDAO;
	/** acceso a datos aspectos poblacionales */
	private IEstAspecPoblacionalDAOT estAspecPoblacionalDAO;
	/** acceso a datos log de cambios */
	private IEstCambioLDAOT estCambioLDAO;
	/** acceso a datos condiciones de vivienda */
	private IEstCondViviendaDAOT estCondViviendaDAO;
	/** acceso a datos exoneracion de ahorro */
	private IEstExoneraAhorroDAOT estExoneraAhorroDAO;
	/** acceso a datos grupo familiar */
	private IEstGrupoFamiliarDAOT estGrupoFamiliarDAO;
	/** acceso a datos grupo familiar documentacion */
	private IEstGrupoFamiliarDocDAOT estGrupoFamiliarDocDAO;
	/** acceso a datos ocupacion del espacio publico */
	private IEstOcupacionEpuDAOT estOcupacionEpupuDAO;


	/**
	 * 
	 */
	public EstSocioEconomicoServiceImpl() {
	}

	//----------------------------------------------------------------------
	//--- propiedades y constructores                                  end()
	//----------------------------------------------------------------------

	//----------------------------------------------------------------------
	//--- implementacion de metodos para acciones                     init()
	//----------------------------------------------------------------------

	/**
	 * 
	 */
	public void insert(EstSocioEconomico estSocioEconomico) throws EstSocioEconomicoException {
		try{
			estSocioEconomico.setUsuarioCrea(getPrincipalUser());
			estSocioEconomico.setFechaCrea(new Date());
			getEstSocioEconomicoDAO().insert(estSocioEconomico);
		}catch (Exception e) {
			Object [] infoError = {
				estSocioEconomico.getCodigo()
			};
			if(e.getCause().toString().indexOf("UNIQUE KEY") >= 0){
				throw new EstSocioEconomicoException(new EstSocioEconomicoMessageDescriptor(MessageDescriptorConstant.UK_VIOLATION), infoError, e);
			}else{
				throw new EstSocioEconomicoException(new EstSocioEconomicoMessageDescriptor(MessageDescriptorConstant.SAVE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void update(EstSocioEconomico estSocioEconomico) throws EstSocioEconomicoException {
		try{
			estSocioEconomico.setUsuarioModifica(getPrincipalUser());
			estSocioEconomico.setFechaModifica(new Date());
			getEstSocioEconomicoDAO().update(estSocioEconomico);
		}catch (Exception e) {
			Object [] infoError = {
				estSocioEconomico.getCodigo()
			};
			if(e.getCause().toString().indexOf("UNIQUE KEY") >= 0){
				throw new EstSocioEconomicoRuntimeException(new EstSocioEconomicoMessageDescriptor(MessageDescriptorConstant.UK_VIOLATION), infoError, e);
			}else{
				throw new EstSocioEconomicoRuntimeException(new EstSocioEconomicoMessageDescriptor(MessageDescriptorConstant.UPDATE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void delete(EstSocioEconomico estSocioEconomico) throws EstSocioEconomicoException {
		try {
			estSocioEconomico.setUsuarioModifica(getPrincipalUser());
			estSocioEconomico.setFechaModifica(new Date());
			getEstSocioEconomicoDAO().delete(estSocioEconomico);
		}catch (Exception e) {
			Object [] infoError = {
				estSocioEconomico.getCodigo()
			};
			throw new EstSocioEconomicoRuntimeException(new EstSocioEconomicoMessageDescriptor(MessageDescriptorConstant.DELETE), infoError, e);
		}
	}

	/**
	 * @return 
	 * 
	 */
	public final List load(int start,int max, EstSocioEconomicoComp estSocioEconomicoComp) throws EstSocioEconomicoException {
		try{
			//return getEstSocioEconomicoDAO().getAllEstSocioEconomicoPaginated(start, max, criteria);
			return getEstSocioEconomicoDAO().load(estSocioEconomicoComp);
		}catch (Exception e) {
			Object [] infoError = null;
			throw new EstSocioEconomicoRuntimeException(new EstSocioEconomicoMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	/**
	 * 
	 */
	public final EstSocioEconomico get(long id) throws EstSocioEconomicoException {
		try{
			return getEstSocioEconomicoDAO().findByPrimaryKey(id);
		}catch (Exception e) {
			Object [] infoError = {new Long(id)};
			throw new EstSocioEconomicoRuntimeException(new EstSocioEconomicoMessageDescriptor(MessageDescriptorConstant.GET), infoError, e);
		}
	}

	//----------------------------------------------------------------------
	//--- implementacion de metodos para acciones                      end()
	//----------------------------------------------------------------------

	//----------------------------------------------------------------------
	//--- getters and setters                                         init()
	//----------------------------------------------------------------------

	/**
	 * @author Usuario
	 *
	 */
	public IEstSocioEconomicoDAOT getEstSocioEconomicoDAO() {
		return estSocioEconomicoDAO;
	}

	/**
	 * @author Usuario
	 *
	 */
	public void setEstSocioEconomicoDAO(IEstSocioEconomicoDAOT estSocioEconomicoDAO) {
		this.estSocioEconomicoDAO = estSocioEconomicoDAO;
	}

	public IEstSeguridadSocDAOT getEstSeguridadSocDAO() {
		return estSeguridadSocDAO;
	}

	public void setEstSeguridadSocDAO(IEstSeguridadSocDAOT estSeguridadSocDAO) {
		this.estSeguridadSocDAO = estSeguridadSocDAO;
	}

	public IEstAreaSocioeconoDAOT getEstAreaSocioeconoDAO() {
		return estAreaSocioeconoDAO;
	}

	public void setEstAreaSocioeconoDAO(IEstAreaSocioeconoDAOT estAreaSocioeconoDAO) {
		this.estAreaSocioeconoDAO = estAreaSocioeconoDAO;
	}

	public IEstAspecPoblacionalDAOT getEstAspecPoblacionalDAO() {
		return estAspecPoblacionalDAO;
	}

	public void setEstAspecPoblacionalDAO(
			IEstAspecPoblacionalDAOT estAspecPoblacionalDAO) {
		this.estAspecPoblacionalDAO = estAspecPoblacionalDAO;
	}

	public IEstCambioLDAOT getEstCambioLDAO() {
		return estCambioLDAO;
	}

	public void setEstCambioLDAO(IEstCambioLDAOT estCambioLDAO) {
		this.estCambioLDAO = estCambioLDAO;
	}

	public IEstCondViviendaDAOT getEstCondViviendaDAO() {
		return estCondViviendaDAO;
	}

	public void setEstCondViviendaDAO(IEstCondViviendaDAOT estCondViviendaDAO) {
		this.estCondViviendaDAO = estCondViviendaDAO;
	}

	public IEstExoneraAhorroDAOT getEstExoneraAhorroDAO() {
		return estExoneraAhorroDAO;
	}

	public void setEstExoneraAhorroDAO(IEstExoneraAhorroDAOT estExoneraAhorroDAO) {
		this.estExoneraAhorroDAO = estExoneraAhorroDAO;
	}

	public IEstGrupoFamiliarDAOT getEstGrupoFamiliarDAO() {
		return estGrupoFamiliarDAO;
	}

	public void setEstGrupoFamiliarDAO(IEstGrupoFamiliarDAOT estGrupoFamiliarDAO) {
		this.estGrupoFamiliarDAO = estGrupoFamiliarDAO;
	}

	public IEstGrupoFamiliarDocDAOT getEstGrupoFamiliarDocDAO() {
		return estGrupoFamiliarDocDAO;
	}

	public void setEstGrupoFamiliarDocDAO(
			IEstGrupoFamiliarDocDAOT estGrupoFamiliarDocDAO) {
		this.estGrupoFamiliarDocDAO = estGrupoFamiliarDocDAO;
	}

	public IEstOcupacionEpuDAOT getEstOcupacionEpupuDAO() {
		return estOcupacionEpupuDAO;
	}

	public void setEstOcupacionEpupuDAO(IEstOcupacionEpuDAOT estOcupacionEpupuDAO) {
		this.estOcupacionEpupuDAO = estOcupacionEpupuDAO;
	}

	//----------------------------------------------------------------------
	//--- getters and setters                                          end()
	//----------------------------------------------------------------------

}
